package com.ztl.leetcode.SwordFingerOffer;

/**
 * @author @ztl
 * @ClassName:LeftHandedString
 * @Package:com.ztl.leetcode.SwordFingerOffer
 * @date 2023年05月10日 21:38
 * @description: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 时间复杂度O(n) 空间复杂度O(n)
 * @version: 1.0
 */
public class LeftHandedString_58 {
    //不适用String自带字符串切片方法substring(...) 时间复杂度O(n) 空间复杂度O(n)
    public String reverseLeftWords(String s, int n) {
        //遍历每个字符，使用StringBuilder存储旋转之后的字符串
        //先存储n(包括)之后的字符，再存储n之前的字符
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++)
            res.append(s.charAt(i));
        for(int i = 0; i < n; i++)
            res.append(s.charAt(i));

        //最后返回结果
        return res.toString();

    }

    //使用substring(...)方法，时间复杂度O(n) 空间复杂度O(n)
    public String reverseLeftWords2(String s, int n) {
        //先判断非法字符串
        if(s==null || s.length()==0){
            return "";
        }
        //直接调用substring，把n以后的字符串拼接到前面，n之前的字符串拼接到后面
        return s.substring(n)+s.substring(0,n);
    }
}
